Programmable integrated circuits (ICs) may be programmed by a user to perform specified logic functions. One type of programmable IC, known as a field programmable gate array (FPGA), typically includes programmable resources that are arranged in an array of programmable tiles including, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay lock loops (DLLs), bus or network interfaces such as Peripheral Component Interconnect Express (PCIe) and Ethernet and so forth.
Programmable ICs provide flexible hardware solutions that are advantageous for high performance parallel computing in advanced digital communications and video applications. For many complex applications, it may be desirable to implement a portion of the design in software (a program design) and a portion of the design in programmable resources. Many manufacturers, such as Xilinx, Inc., include embedded processor systems in a number of programmable ICs. These embedded processor systems can meet both software and hardware programmable needs. Embedded processor systems often include operating memory, software instruction storage, input/output, and other components of a computer system. These systems are referred to as system on chip (SOC) solutions. In these systems, designers may implement complex functions in programmable logic to increase efficiency and throughput. This architectural combination gives an advantageous mix of serial and parallel processing, flexibility, and scalability, thereby enabling a more optimized system partitioning.
During the process of developing a system design to be implemented on a programmable IC, the behavior of the system design is simulated based on a specification of the circuit design. Simulating the system design helps to verify correct behavior prior to physical implementation and deployment. Wasted manufacturing costs due to faulty design may thereby be avoided. Numerous tools are available for simulating circuit designs including, for example, high-level modeling systems (HLMS).
An HLMS is a software tool in which circuit designs can be assembled using a graphical user interface, translated into a hardware description language (e.g., HDL and VHDL), simulated, and translated into executable simulation code or into a configuration data stream that can be used to configure programmable resources of a programmable IC.
For a system design that includes a circuit to be implemented in programmable resources of a programmable IC and a program to be executed on a processer of the programmable IC, the circuit design and programmed processor are co-simulated together to verify correct interoperation of the circuit and processor. Based on the behavior exhibited by the simulated system, further modification to the circuit design and/or program design may be required.
In some simulation configurations, rather than simulating the programmed processor in the HLMS, the program may be executed on the processor of the programmable IC during simulation of the circuit design in the HLMS. However, it can be difficult to communicate data signals output from the programmed processor to the HLMS and vice versa. For instance, an interface circuit is needed to provide data signals between the HLMS and the processor of the programmable IC during the simulation. The interface circuit is configured by a designer to communicate data signals to and from desired ports of the processor. The circuit design is also configured by the designer to map ports of the circuit design to correct ports of the interface circuit. Moreover, after simulation of the circuit design in the HLMS, the circuit design must be reconfigured by a designer to map ports of the circuit design directly to corresponding ports of the processor of the programmable IC. Configuration of an interface circuit and mapping of ports is a lengthy manual process, which may present a substantial barrier for a designer.